#include "Sql_list.h"


/** 初始化
 * 函数名 Init_Sql_List
 * 参数 
 *      @L 需要初始化的 静态表
 * 返回值
 *      无
 * 功能
 *      对静态表进行初始化
 */
void Init_Sql_List(Sql_list * L)
{
    // 对创建的数据做清空
    memset(L->data , 50 * sizeof(L->data[0]) , 0);
    // 初始化表的长度 len
    L->len = 0;
}

/** 尾插
 * 函数名 tail_insert_list
 * 参数 
 *      @L 需要尾插的 静态表
 *      @data 需要插入的数据
 * 返回值
 *      无
 * 功能
 *      对静态表进行尾插
 */
void tail_insert_list(Sql_list * L  , Elenemt_data data)
{
    // 安全判断
    if (NULL == L)
    {
        printf("顺序表 为 NULL \n");
        return ;
    }
    if (MAX_SIZ <= L->len)
    {
        printf("顺序表 为 满 \n");
        return ;
    }

    // 插入
    L->data[L->len] = data;
    // 迭代
    L->len++;

}

/** 尾删
 * 函数名 tail_del_list
 * 参数 
 *      @L 需要尾删的 静态表
 * 返回值
 *      无
 * 功能
 *      对静态表进行尾删
 */
void tail_del_list(Sql_list * L )
{
    // 安排判断
    if (NULL == L)
    {
        printf("顺序表 为 NULL \n");
        return ;
    }
    if (0 >= L->len)
    {
        printf("顺序表 内 无数据 \n");
        return ;
    }

    memset(&L->data[L->len] , sizeof(L->data[0]) , 0);

    L->len--;

}

/** 遍历打印
 * 函数名 printf_Sql_List
 * 参数 
 *      @L 需要遍历的 静态表
 * 返回值
 *      无
 * 功能
 *      对静态表进行遍历打印
 */
void printf_Sql_List(Sql_list * L)
{
    // 安全判断
    if (NULL == L)
    {
        printf("顺序表 为 NULL \n");
        return ;
    }
    if (0 == L->len)
    {
        printf("顺序表 内 无数据 \n");
        return ;
    }

    for (size_t i = 0; i < L->len; i++)
    {
        printf("姓名:%s 性别:%s 年龄:%d 成绩:%d 学号:%d\n",
        L->data[i].name , L->data[i].sex , L->data[i].age , 
        L->data[i].sco  , L->data[i].id 
        );
    }

}

/** 任意位置插入
 * 函数名 printf_Sql_List
 * 参数 
 *      @L 需要遍历的 静态表
 *      @index 需要插入的位置
 *      @data 需要插入的数据
 * 返回值
 *      无
 * 功能
 *      对静态表任意位置进行插入数据
 */
void pos_insert_list(Sql_list * L , int index , Elenemt_data data)
{
    // 安全判断
    if (NULL == L)
    {
        printf("顺序表 为 NULL \n");
        return ;
    }
    if (MAX_SIZ <= L->len)
    {
        printf("顺序表 为 满 \n");
        return ;
    }

    for (int i = L->len; i >= index - 1; i--)
    {
       L->data[i+1] = L->data[i];
    }

    //插入数据
    L->data[index -1] = data;
    //迭代
    L->len++;
}

/** 任意位置删除
 * 函数名 printf_Sql_List
 * 参数 
 *      @L 需要遍历的 静态表
 *      @index 需要删除的位置
 * 返回值
 *      无
 * 功能
 *      对静态表任意位置进行删除数据
 */
void pos_del_list(Sql_list * L , int index)
{
    // 安全判断
    if (NULL == L)
    {
        printf("顺序表 为 NULL \n");
        return ;
    }
    if (MAX_SIZ <= L->len)
    {
        printf("顺序表 为 满 \n");
        return ;
    }

    for (int i = index - 1; i <= L->len; i++)
    {
       L->data[i] = L->data[i+1];
    }

    //迭代
    L->len--;
}


